﻿#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "websocketclient.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_btnSelect_clicked();
    void on_btnOpen_clicked();
    void on_btnConnectWs_clicked();
    void on_btnRequestRtsp_clicked();
    
    // 登录相关槽函数
    void on_btnLogin_clicked();
    void on_btnLogout_clicked();
    
    // WebSocket相关槽函数
    void onWebSocketConnectionStateChanged(bool connected);
    void onRtspUrlReceived(const QString &url, const QString &expiresAt);
    void onWebSocketError(const QString &errorMessage);
    
    // 登录相关槽函数
    void onChallengeReceived(const QString &challenge, int expiresIn);
    void onLoginSuccess(const QString &accessToken, const QString &refreshToken, const QJsonObject &userInfo);
    void onLoginFailed(int errorCode, const QString &errorMessage);

private:
    Ui::Widget *ui;
    WebSocketClient *m_webSocketClient;
    
    // 登录相关变量
    QString m_deviceId;           // 设备ID
    QString m_currentChallenge;   // 当前挑战码
    QString m_accessToken;        // 访问令牌
    QString m_refreshToken;       // 刷新令牌
    bool m_isLoggedIn;            // 是否已登录
    QJsonObject m_userInfo;       // 用户信息
    
    // 生成密码凭证（SHA256(password + challenge)）
    QString generateCredential(const QString &password, const QString &challenge);
    // 更新界面登录状态
    void updateLoginStatus(bool isLoggedIn, const QString &username = QString());
};

#endif // WIDGET_H
